home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / GIMP 2.6.8 / gimp-2.6.8-i686-setup.exe / {app} / share / gimp / 2.0 / scripts / chrome-it.scm < prev    next >
Text File  |  2009-12-15  |  8KB  |  226 lines

  1. ;  CHROME-IT
  2. ;   State of the art chrome effect for user-specified mask
  3. ;   This script requires a grayscale image containing a single layer.
  4. ;   This layer is used as the mask for the SOTA chrome effect
  5.  
  6. (define (script-fu-sota-chrome-it mask-img mask-drawable chrome-saturation
  7.          chrome-lightness chrome-factor env-map hc cc carve-white)
  8.  
  9.   (define (set-pt a index x y)
  10.     (begin
  11.       (aset a (* index 2) x)
  12.       (aset a (+ (* index 2) 1) y)
  13.     )
  14.   )
  15.  
  16.   (define (spline-chrome-it)
  17.     (let* ((a (cons-array 18 'byte)))
  18.       (set-pt a 0 0 0)
  19.       (set-pt a 1 31 235)
  20.       (set-pt a 2 63 23)
  21.       (set-pt a 3 95 230)
  22.       (set-pt a 4 127 25)
  23.       (set-pt a 5 159 210)
  24.       (set-pt a 6 191 20)
  25.       (set-pt a 7 223 240)
  26.       (set-pt a 8 255 31)
  27.       a
  28.     )
  29.   )
  30.  
  31.   (define (brush brush-size)
  32.     (cond ((<= brush-size 5) "Circle Fuzzy (05)")
  33.           ((<= brush-size 7) "Circle Fuzzy (07)")
  34.           ((<= brush-size 9) "Circle Fuzzy (09)")
  35.           ((<= brush-size 11) "Circle Fuzzy (11)")
  36.           ((<= brush-size 13) "Circle Fuzzy (13)")
  37.           ((<= brush-size 15) "Circle Fuzzy (15)")
  38.           ((<= brush-size 17) "Circle Fuzzy (17)")
  39.           (else "Circle Fuzzy (19)")
  40.     )
  41.   )
  42.  
  43.   (define (shadows val)
  44.     (/ (* 0.96 val) 2.55)
  45.   )
  46.  
  47.   (define (midtones val)
  48.     (/ val 2.55)
  49.   )
  50.  
  51.   (define (highlights val)
  52.     (/ (* 1.108 val) 2.55)
  53.   )
  54.  
  55.   (define (rval col)
  56.     (car col)
  57.   )
  58.  
  59.   (define (gval col)
  60.     (cadr col)
  61.   )
  62.  
  63.   (define (bval col)
  64.     (caddr col)
  65.   )
  66.  
  67.   (define (sota-scale val scale chrome-factor)
  68.     (* (sqrt val) (* scale chrome-factor))
  69.   )
  70.  
  71.   (define (copy-layer-chrome-it dest-image dest-drawable source-image source-drawable)
  72.     (gimp-selection-all dest-image)
  73.     (gimp-edit-clear dest-drawable)
  74.     (gimp-selection-none dest-image)
  75.     (gimp-selection-all source-image)
  76.     (gimp-edit-copy source-drawable)
  77.     (let (
  78.          (floating-sel (car (gimp-edit-paste dest-drawable FALSE)))
  79.          )
  80.          (gimp-floating-sel-anchor floating-sel)
  81.     )
  82.   )
  83.  
  84.   (let* (
  85.         (banding-img (car (gimp-file-load 1 env-map env-map)))
  86.         (banding-layer (car (gimp-image-get-active-drawable banding-img)))
  87.         (banding-height (car (gimp-drawable-height banding-layer)))
  88.         (banding-width (car (gimp-drawable-width banding-layer)))
  89.         (banding-type (car (gimp-drawable-type banding-layer)))
  90.         (width (car (gimp-drawable-width mask-drawable)))
  91.         (height (car (gimp-drawable-height mask-drawable)))
  92.         (img (car (gimp-image-new width height GRAY)))
  93.         (size (min width height))
  94.         (offx1 (sota-scale size 0.33 chrome-factor))
  95.         (offy1 (sota-scale size 0.25 chrome-factor))
  96.         (offx2 (sota-scale size (- 0.33) chrome-factor))
  97.         (offy2 (sota-scale size (- 0.25) chrome-factor))
  98.         (feather (sota-scale size 0.5 chrome-factor))
  99.         (brush-size (sota-scale size 0.5 chrome-factor))
  100.         (mask (car (gimp-channel-new img width height "Chrome Stencil" 50 '(0 0 0))))
  101.         (bg-layer (car (gimp-layer-new img width height GRAY-IMAGE "Background" 100 NORMAL-MODE)))
  102.         (layer1 (car (gimp-layer-new img banding-width banding-height banding-type "Layer1" 100 NORMAL-MODE)))
  103.         (layer2 (car (gimp-layer-new img width height GRAYA-IMAGE "Layer 2" 100 DIFFERENCE-MODE)))
  104.         (layer3 (car (gimp-layer-new img width height GRAYA-IMAGE "Layer 3" 100 NORMAL-MODE)))
  105.         (shadow (car (gimp-layer-new img width height GRAYA-IMAGE "Drop Shadow" 100 NORMAL-MODE)))
  106.         (mask-fs 0)
  107.         (layer-mask 0)
  108.         )
  109.  
  110.     (gimp-context-push)
  111.  
  112.     (gimp-image-undo-disable img)
  113.  
  114.     (gimp-image-add-channel img mask 0)
  115.     (gimp-image-add-layer img bg-layer 0)
  116.     (gimp-image-add-layer img shadow 0)
  117.     (gimp-image-add-layer img layer3 0)
  118.     (gimp-image-add-layer img layer2 0)
  119.  
  120.     (gimp-edit-copy mask-drawable)
  121.     (set! mask-fs (car (gimp-edit-paste mask FALSE)))
  122.     (gimp-floating-sel-anchor mask-fs)
  123.     (if (= carve-white FALSE)
  124.         (gimp-invert mask)
  125.     )
  126.  
  127.     (gimp-context-set-background '(255 255 255))
  128.     (gimp-selection-none img)
  129.     (gimp-edit-fill layer2 BACKGROUND-FILL)
  130.     (gimp-edit-fill layer3 BACKGROUND-FILL)
  131.     (gimp-edit-clear shadow)
  132.  
  133.     (gimp-drawable-set-visible bg-layer FALSE)
  134.     (gimp-drawable-set-visible shadow FALSE)
  135.  
  136.     (gimp-selection-load mask)
  137.     (gimp-context-set-background '(0 0 0))
  138.     (gimp-selection-translate img offx1 offy1)
  139.     (gimp-selection-feather img feather)
  140.     (gimp-edit-fill layer2 BACKGROUND-FILL)
  141.     (gimp-selection-translate img (* 2 offx2) (* 2 offy2))
  142.     (gimp-edit-fill layer3 BACKGROUND-FILL)
  143.     (gimp-selection-none img)
  144.     (set! layer2 (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE)))
  145.     (gimp-invert layer2)
  146.  
  147.     (gimp-image-add-layer img layer1 0)
  148.     (copy-layer-chrome-it img layer1 banding-img banding-layer)
  149.     (gimp-image-delete banding-img)
  150.     (gimp-layer-scale layer1 width height FALSE)
  151.     (plug-in-gauss-iir RUN-NONINTERACTIVE img layer1 10 TRUE TRUE)
  152.     (gimp-layer-set-opacity layer1 50)
  153.     (set! layer1 (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE)))
  154.     (gimp-curves-spline layer1 0 18 (spline-chrome-it))
  155.  
  156.     (set! layer-mask (car (gimp-layer-create-mask layer1 ADD-BLACK-MASK)))
  157.     (gimp-layer-add-mask layer1 layer-mask)
  158.     (gimp-selection-load mask)
  159.     (gimp-context-set-background '(255 255 255))
  160.     (gimp-edit-fill layer-mask BACKGROUND-FILL)
  161.  
  162.     (set! layer2 (car (gimp-layer-copy layer1 TRUE)))
  163.     (gimp-image-add-layer img layer2 0)
  164.     (gimp-context-set-brush (brush brush-size))
  165.     (gimp-context-set-foreground '(255 255 255))
  166.     (gimp-edit-stroke layer-mask)
  167.  
  168.     (gimp-context-set-background '(0 0 0))
  169.     (gimp-selection-feather img (* feather 1.5))
  170.     (gimp-selection-translate img (* 2.5 offx1) (* 2.5 offy1))
  171.     (gimp-edit-fill shadow BACKGROUND-FILL)
  172.  
  173.     (gimp-selection-all img)
  174.     (gimp-context-set-pattern "Marble #1")
  175.     (gimp-edit-bucket-fill bg-layer PATTERN-BUCKET-FILL NORMAL-MODE 100 0 FALSE 0 0)
  176.     (gimp-selection-none img)
  177.  
  178.     (gimp-image-convert-rgb img)
  179.  
  180.     (gimp-color-balance layer1 0 TRUE (shadows (rval hc)) (shadows (gval hc)) (shadows (bval hc)))
  181.     (gimp-color-balance layer1 1 TRUE (midtones (rval hc)) (midtones (gval hc)) (midtones (bval hc)))
  182.     (gimp-color-balance layer1 2 TRUE (highlights (rval hc)) (highlights (gval hc)) (highlights (bval hc)))
  183.  
  184.     (gimp-color-balance layer2 0 TRUE (shadows (rval cc)) (shadows (gval cc)) (shadows (bval cc)))
  185.     (gimp-color-balance layer2 1 TRUE (midtones (rval cc)) (midtones (gval cc)) (midtones (bval cc)))
  186.     (gimp-color-balance layer2 2 TRUE (highlights (rval cc)) (highlights (gval cc)) (highlights (bval cc)))
  187.     (gimp-hue-saturation layer2 0 0 chrome-lightness chrome-saturation)
  188.  
  189.     (gimp-drawable-set-visible shadow TRUE)
  190.     (gimp-drawable-set-visible bg-layer TRUE)
  191.  
  192.     (gimp-drawable-set-name layer2 "Chrome")
  193.     (gimp-drawable-set-name layer1 "Highlight")
  194.  
  195.     (gimp-image-remove-channel img mask)
  196.  
  197.     (gimp-display-new img)
  198.     (gimp-image-undo-enable img)
  199.  
  200.     (gimp-context-pop)
  201.   )
  202. )
  203.  
  204. (script-fu-register "script-fu-sota-chrome-it"
  205.   _"Stencil C_hrome..."
  206.   _"Add a chrome effect to the selected region (or alpha) using a specified (grayscale) stencil"
  207.   "Spencer Kimball"
  208.   "Spencer Kimball"
  209.   "1997"
  210.   "GRAY"
  211.   SF-IMAGE       "Chrome image"      0
  212.   SF-DRAWABLE    "Chrome mask"       0
  213.   SF-ADJUSTMENT _"Chrome saturation" '(-80 -100 100 1 10 0 0)
  214.   SF-ADJUSTMENT _"Chrome lightness"  '(-47 -100 100 1 10 0 0)
  215.   SF-ADJUSTMENT _"Chrome factor"     '(0.75 0 1 0.1 0.01 2 0)
  216.   SF-FILENAME   _"Environment map"
  217.                 (string-append gimp-data-directory
  218.                               "/scripts/images/beavis.jpg")
  219.   SF-COLOR      _"Highlight balance"  '(211 95 0)
  220.   SF-COLOR      _"Chrome balance"     "black"
  221.   SF-TOGGLE     _"Chrome white areas" TRUE
  222. )
  223.  
  224. (script-fu-menu-register "script-fu-sota-chrome-it"
  225.                          "<Image>/Filters/Decor")
  226.